home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 113_01 / a68tbls.csm < prev    next >
Text File  |  1985-03-09  |  13KB  |  636 lines

  1.     TITLE    'MACHINE LANGUAGE FUNCTIONS FOR 6800/6801 CROSS-ASSEMBLER V2.6'
  2.     PAGE    60
  3. ;
  4. ;    6800/6801 CROSS-ASSEMBLER  V. 2.6
  5. ;
  6. ;    MAY, 1980
  7. ;
  8. ;    JULY, 1980 -- REV. 2.2 CONSISTING OF FIXING THE M ERRORS THAT
  9. ;        COME FROM FORWARD REFERENCES IN FDB AND FCB PSEUDO-OPS.
  10. ;
  11. ;    OCTOBER, 1980 -- REV. 2.3 CONSISTING OF UPDATING THE ASSEMBLY
  12. ;        LANGUAGE FILE AND I/O ROUTINES TO MATCH AND TAKE
  13. ;        ADVANTAGE OF BDS C V1.4.
  14. ;
  15. ;    OCTOBER, 1983 -- REV. 2.4 CONSISTING OF ADDING THE CPU PSEUDO-OP,
  16. ;        ADDING THE 6801 CPU'S EXTRA OPCODES, AND SPEEDING UP THE
  17. ;        CODE A BIT.
  18. ;
  19. ;    SEPTEMBER, 1984 -- REV. 2.5 CONSISTING OF FIXING BUGS WITH THE SYMBOL
  20. ;        TABLE SORT, THE WRITING OF FILES TO SPECIFIED DRIVES, AND THE
  21. ;        HANDLING OF BLANK INPUT LINES.
  22. ;
  23. ;    JUNE, 1985 -- REV. 2.6 CONSISTING OF FIXING A BUG IN THE IF BLOCK
  24. ;        NESTING MECHANISM.
  25. ;
  26. ;    COPYRIGHT (C) 1980,83,84,85 WILLIAM C. COLLEY, III.
  27. ;
  28. ;FILE:    A68TBLS.CSM
  29. ;
  30. ;MACHINE LANGUAGE FUNCTIONS.
  31. ;
  32.  
  33. ;
  34. ;ARGUEMENTS ARE PASSED THROUGH OFFSETS FROM THE STACK POINTER.
  35. ;THEY ARE DEFINED AS FOLLOWS:
  36. ;
  37. ARG0    EQU    2        ;FIRST ARGUEMENT.
  38. ARG1    EQU    4        ;SECOND ARGUEMENT.
  39. ARG2    EQU    6        ;THIRD ARGUEMENT.
  40. ARG3    EQU    8        ;FOURTH ARGUEMENT.
  41. ;
  42.     PAGE
  43. ;
  44. ;THIS FUNCTION GETS OPCODE NUMBER NUM FROM THE OPCODE TABLE.  THE FUNCTION
  45. ;RETURNS 0 IF THE OPCODE WAS NOT FOUND, 1 IF IT WAS.
  46. ;
  47. ;FUNCTION IS CALLED AS FOLLOWS:
  48. ;
  49. ;    GETOPC(NUM,OPCODE,VALUE,ATTRIB);
  50. ;
  51. ;    NUM    CHARACTER CONTAINING THE NUMBER OF THE DESIRED ENTRY.
  52. ;            0 REPRESENTS THE FIRST ENTRY IN THE TABLE.  THE
  53. ;            TABLE IS IN ALPHABETICAL ORDER FOR THE BENEFIT
  54. ;            OF THE BINARY SEARCHING ROUTINE (WRITTEN IN C).
  55. ;    OPCODE    POINTER TO A 5-CHARACTER ARRAY WHICH WILL RECEIVE THE
  56. ;            OPCODE'S NAME (NULL TERMINATED).
  57. ;    VALUE    POINTER TO A CHARACTER THAT WILL RECEIVE THE OPCODE'S
  58. ;            VALUE.
  59. ;    ATTRIB    POINTER TO A CHARACTER THAT WILL RECEIVE THE OPCODE'S
  60. ;            ATTIBUTE BYTE.
  61. ;
  62. NUM    EQU    ARG0
  63. OPCODE    EQU    ARG1
  64. VALUE    EQU    ARG2
  65. ATTRIB    EQU    ARG3
  66. ;
  67.     FUNCTION GETOPC
  68. ;
  69.     LXI    H, NUM        ;GET ENTRY NUMBER IN TABLE.
  70.     DAD    SP
  71.     MOV    A,M
  72.     CPI    OPTBLL        ;ENTRY IN TABLE?
  73.     LXI    H, 0        ;IF NOT, RETURN 0.
  74.     RNC
  75. ;
  76.     MOV    L,A        ;FIND ENTRY BY COMPUTING
  77.     DAD    H        ;(6 * NUM) + TABLE BASE.
  78.     MOV    E,L
  79.     MOV    D,H
  80.     DAD    H
  81.     DAD    D
  82.     LXI    D, OPCTBL
  83.     DAD    D
  84.     MOV    E,L
  85.     MOV    D,H
  86. ;
  87.     LXI    H, OPCODE    ;FIND OPCODE RETURN AREA.
  88.     DAD    SP
  89.     MOV    A,M
  90.     INX    H
  91.     MOV    H,M
  92.     MOV    L,A
  93. ;
  94.     PUSH    B        ;MOVE OPCODE OUT TO RETURN AREA.
  95.     MVI    C, 4
  96. MOVOPC:    LDAX    D
  97.     INX    D
  98.     MOV    M,A
  99.     INX    H
  100.     DCR    C
  101.     JNZ    MOVOPC
  102.     POP    B
  103. ;
  104.     MVI    M, 0        ;TERMINATE OPCODE.
  105. ;
  106.     LXI    H, ATTRIB    ;FIND ATTRIBUTE RETURN AREA.
  107.     DAD    SP
  108.     MOV    A,M
  109.     INX    H
  110.     MOV    H,M
  111.     MOV    L,A
  112. ;
  113.     LDAX    D        ;MOVE ATTRIBUTE TO RETURN AREA.
  114.     INX    D
  115.     MOV    M,A
  116. ;
  117.     LXI    H, VALUE    ;FIND VALUE RETURN AREA.
  118.     DAD    SP
  119.     MOV    A,M
  120.     INX    H
  121.     MOV    H,M
  122.     MOV    L,A
  123. ;
  124.     LDAX    D        ;MOVE VALUE TO RETURN AREA.
  125.     MOV    M,A
  126. ;
  127.     LXI    H, 1        ;RETURN 1 FOR SUCCESSFUL GET.
  128.     RET
  129. ;
  130. ;THE OPCODE TABLE ITSELF:
  131. ;
  132. ;    EACH ENTRY HAS A FOUR-BYTE NAME, A ONE-BYTE ATTRIBUTE,
  133. ;    AND A ONE-BYTE VALUE.  THE VALUE IS THE LOWEST
  134. ;    NUMBERED OPCODE HAVING THAT NAME.
  135. ;
  136. ;    THE ATTRIBUTE BYTE BITS ARE ALLOCATED AS FOLLOWS:
  137. ;
  138. ;        7 = PSEUDO-OP.
  139. ;        6 = IF NOT PSEUDO-OP, DIRECT ADDRESSING ALLOWED.
  140. ;            IF PSEUDO-OP, IF GROUP (NO LABEL ALLOWED).
  141. ;        5 = RELATIVE ADDRESSING.
  142. ;        4 = REGISTER (A,B) MUST BE SPECIFIED.
  143. ;        3 = 16-BIT IMMEDIATE ADDRESSING ALLOWED.
  144. ;        2 = 8-BIT IMMEDIATE ADDRESSING ALLOWED.
  145. ;        1 = INDEXED OR EXTENDED ADDRESSING ALLOWED.
  146. ;        0 = REGISTER (A,B) MAY BE SPECIFIED.
  147. ;
  148. ;    BITS 4 AND 0 WILL NEVER OCCUR TOGETHER BECAUSE THE REGISTER (A,B)
  149. ;    SPECIFICATION IS EITHER FORBIDDEN, OPTIONAL, OR REQUIRED.  BOTH BITS
  150. ;    SET IS USED TO INDICATE AN OPCODE THAT IS ONLY VALID FOR THE 6801
  151. ;    CPU.  WHEN THE LINE ASSEMBLY ROUTINE FINDS BOTH BITS SET, IT CHECKS
  152. ;    WHETHER OR NOT 6801 OPCODES ARE ENABLED, THEN CLEARS BOTH BITS.  IN
  153. ;    ADDITION, IF THE 6801 OPCODES ARE ENABLED, THE LINE ASSEMBLY ROUTINE
  154. ;    CONVERTS THE ATTRIBUTE BYTE OF THE JSR OPCODE FROM 02H TO 42H.
  155. ;
  156. OPCTBL:    DB    'ABA', 0,    0,    1BH
  157.     DB    'ABX', 0,    11H,    3AH
  158.     DB    'ADC', 0,    56H,    89H
  159.     DB    'ADCA',        46H,    89H
  160.     DB    'ADCB',        46H,    0C9H
  161.     DB    'ADD', 0,    56H,    8BH
  162.     DB    'ADDA',        46H,    8BH
  163.     DB    'ADDB',        46H,    0CBH
  164.     DB    'ADDD',        5BH,    0C3H
  165.     DB    'AND', 0,    56H,    84H
  166.     DB    'ANDA',        46H,    84H
  167.     DB    'ANDB',        46H,    0C4H
  168.     DB    'ASL', 0,    03H,    48H
  169.     DB    'ASLA',        0,    48H
  170.     DB    'ASLB',        0,    58H
  171.     DB    'ASLD',        11H,    05H
  172.     DB    'ASR', 0,    03H,    47H
  173.     DB    'ASRA',        0,    47H
  174.     DB    'ASRB',        0,    57H
  175.     DB    'BCC', 0,    20H,    24H
  176.     DB    'BCS', 0,    20H,    25H
  177.     DB    'BEQ', 0,    20H,    27H
  178.     DB    'BGE', 0,    20H,    2CH
  179.     DB    'BGT', 0,    20H,    2EH
  180.     DB    'BHI', 0,    20H,    22H
  181.     DB    'BHS', 0,    20H,    24H
  182.     DB    'BIT', 0,    56H,    85H
  183.     DB    'BITA',        46H,    85H
  184.     DB    'BITB',        46H,    0C5H
  185.     DB    'BLE', 0,    20H,    2FH
  186.     DB    'BLO', 0,    20H,    25H
  187.     DB    'BLS', 0,    20H,    23H
  188.     DB    'BLT', 0,    20H,    2DH
  189.     DB    'BMI', 0,    20H,    2BH
  190.     DB    'BNE', 0,    20H,    26H
  191.     DB    'BPL', 0,    20H,    2AH
  192.     DB    'BRA', 0,    20H,    20H
  193.     DB    'BRN', 0,    31H,    21H
  194.     DB    'BSR', 0,    20H,    8DH
  195.     DB    'BVC', 0,    20H,    28H
  196.     DB    'BVS', 0,    20H,    29H
  197.     DB    'CBA', 0,    0,    11H
  198.     DB    'CLC', 0,    0,    0CH
  199.     DB    'CLI', 0,    0,    0EH
  200.     DB    'CLR', 0,    03H,    4FH
  201.     DB    'CLRA',        0,    4FH
  202.     DB    'CLRB',        0,    5FH
  203.     DB    'CLV', 0,    0,    0AH
  204.     DB    'CMP', 0,    56H,    81H
  205.     DB    'CMPA',        46H,    81H
  206.     DB    'CMPB',        46H,    0C1H
  207.     DB    'COM', 0,    03H,    43H
  208.     DB    'COMA',        0,    43H
  209.     DB    'COMB',        0,    53H
  210.     DB    'CPU', 0,    80H,    0BH
  211.     DB    'CPX', 0,    4AH,    8CH
  212.     DB    'DAA', 0,    0,    19H
  213.     DB    'DEC', 0,    03H,    4AH
  214.     DB    'DECA',        0,    4AH
  215.     DB    'DECB',        0,    5AH
  216.     DB    'DES', 0,    0,    34H
  217.     DB    'DEX', 0,    0,    09H
  218.     DB    'ELSE',     0C0H,    07H
  219.     DB    'END', 0,    80H,    06H
  220.     DB    'ENDI',        0C0H,    08H
  221.     DB    'EOR', 0,    56H,    88H
  222.     DB    'EORA',        46H,    88H
  223.     DB    'EORB',        46H,    0C8H
  224.     DB    'EQU', 0,    80H,    01H
  225.     DB    'FCB', 0,    80H,    02H
  226.     DB    'FCC', 0,    80H,    04H
  227.     DB    'FDB', 0,    80H,    03H
  228.     DB    'IF', 0, 0,    0C0H,    09H
  229.     DB    'INC', 0,    03H,    4CH
  230.     DB    'INCA',        0,    4CH
  231.     DB    'INCB',        0,    5CH
  232.     DB    'INS', 0,    0,    31H
  233.     DB    'INX', 0,    0,    08H
  234.     DB    'JMP', 0,    02H,    4EH
  235.     DB    'JSR', 0,    02H,    8DH
  236.     DB    'LDA', 0,    56H,    86H
  237.     DB    'LDAA',        46H,    86H
  238.     DB    'LDAB',        46H,    0C6H
  239.     DB    'LDD', 0,    5BH,    0CCH
  240.     DB    'LDS', 0,    4AH,    8EH
  241.     DB    'LDX', 0,    4AH,    0CEH
  242.     DB    'LSL', 0,    03H,    48H
  243.     DB    'LSLA',        0,    48H
  244.     DB    'LSLB',        0,    58H
  245.     DB    'LSLD',        11H,    05H
  246.     DB    'LSR', 0,    03H,    44H
  247.     DB    'LSRA',        0,    44H
  248.     DB    'LSRB',        0,    54H
  249.     DB    'LSRD',        11H,    04H
  250.     DB    'MUL', 0,    11H,    3DH
  251.     DB    'NEG', 0,    03H,    40H
  252.     DB    'NEGA',        0,    40H
  253.     DB    'NEGB',        0,    50H
  254.     DB    'NOP', 0,    0,    01H
  255.     DB    'ORA', 0,    56H,    8AH
  256.     DB    'ORAA',        46H,    8AH
  257.     DB    'ORAB',        46H,    0CAH
  258.     DB    'ORG', 0,    80H,    00H
  259.     DB    'PSH', 0,    10H,    36H
  260.     DB    'PSHA',        0,    36H
  261.     DB    'PSHB',        0,    37H
  262.     DB    'PSHX',        11H,    3CH
  263.     DB    'PUL', 0,    10H,    32H
  264.     DB    'PULA',        0,    32H
  265.     DB    'PULB',        0,    33H
  266.     DB    'PULX',        11H,    38H
  267.     DB    'RMB', 0,    80H,    05H
  268.     DB    'ROL', 0,    03H,    49H
  269.     DB    'ROLA',        0,    49H
  270.     DB    'ROLB',        0,    59H
  271.     DB    'ROR', 0,    03H,    46H
  272.     DB    'RORA',        0,    46H
  273.     DB    'RORB',        0,    56H
  274.     DB    'RTI', 0,    0,    3BH
  275.     DB    'RTS', 0,    0,    39H
  276.     DB    'SBA', 0,    0,    10H
  277.     DB    'SBC', 0,    56H,    82H
  278.     DB    'SBCA',        46H,    82H
  279.     DB    'SBCB',        46H,    0C2H
  280.     DB    'SEC', 0,    0,    0DH
  281.     DB    'SEI', 0,    0,    0FH
  282.     DB    'SET', 0,    80H,    0AH
  283.     DB    'SEV', 0,    0,    0BH
  284.     DB    'STA', 0,    52H,    87H
  285.     DB    'STAA',        42H,    87H
  286.     DB    'STAB',        42H,    0C7H
  287.     DB    'STD', 0,    53H,    0CDH
  288.     DB    'STS', 0,    42H,    08FH
  289.     DB    'STX', 0,    42H,    0CFH
  290.     DB    'SUB', 0,    56H,    80H
  291.     DB    'SUBA',        46H,    80H
  292.     DB    'SUBB',        46H,    0C0H
  293.     DB    'SUBD',        5BH,    83H
  294.     DB    'SWI', 0,    0,    3FH
  295.     DB    'TAB', 0,    0,    16H
  296.     DB    'TAP', 0,    0,    06H
  297.     DB    'TBA', 0,    0,    17H
  298.     DB    'TPA', 0,    0,    07H
  299.     DB    'TST', 0,    03H,    4DH
  300.     DB    'TSTA',        0,    4DH
  301.     DB    'TSTB',        0,    5DH
  302.     DB    'TSX', 0,    0,    30H
  303.     DB    'TXS', 0,    0,    35H
  304.     DB    'WAI', 0,    0,    3EH
  305. ;
  306. OPTBLL    EQU    149        ;CALCULATE LENGTH OF TABLE.
  307. ;
  308.     ENDFUNCTION
  309. ;
  310.     PAGE
  311. ;
  312. ;THIS FUNCTION RETURNS THE NUMBER OF OPCODES IN THE OPCODE TABLE
  313. ;FOR THE BENEFIT OF THE BINARY SEARCHING ROUTINE (WRITTEN IN C).
  314. ;
  315. ;THIS FUNCTION IS CALLED AS FOLLOWS:
  316. ;
  317. ;    NUMOPCS();
  318. ;
  319.     FUNCTION NUMOPCS
  320. ;
  321.     LXI    H, OPTBLL    ;RETURN NUMBER OF OPCODES.
  322.     RET
  323. ;
  324.     ENDFUNCTION
  325. ;
  326.     PAGE
  327. ;
  328. ;THIS FUNCTION REMOVES THE PARITY BIT FROM ITS ARGUMENT AND LOOKS IT UP IN
  329. ;A TABLE.  THE TABLE CLASSIFIES THE CHARACTER INTO ONE OF THE FOLLOWING BINS
  330. ;RETURNING THE APPROPRIATE CODE.
  331. ;
  332. ALPHA    EQU    0    ;ALPHABETIC.
  333. NUMERC    EQU    1    ;NUMERIC (0-9).
  334. ENDLIN    EQU    2    ;END OF LINE MARKERS (CR ;).
  335. COMMA    EQU    3    ;FIELD SEPARATORS (,).
  336. OPERAT    EQU    4    ;OPERATORS (* + / - > < = ( )).
  337. BASDES    EQU    5    ;BASE DESIGNATORS ($ @ %).
  338. Q